package com.payment.transactions.service;

import java.util.List;
import java.util.Map;
import java.util.Optional;

import com.payment.transactions.model.PaymentTransaction;

public interface PaymentTransactionService {
    // 新增操作
    /**
     * 保存单个交易记录
     */
    PaymentTransaction save(PaymentTransaction transaction);

    /**
     * 批量保存交易记录
     */
    int saveAll(List<PaymentTransaction> transactions);

    // 查询操作
    /**
     * 根据ID查询交易记录
     */
    Optional<PaymentTransaction> findById(Integer id);

    /**
     * 查询所有交易记录
     */
    List<PaymentTransaction> findAll();

    /**
     * 分页查询交易记录
     */
    Map<String, Object> findAll(int page, int size, Map<String, Object> params);

    /**
     * 根据条件查询交易记录
     */
    List<PaymentTransaction> findByCondition(Map<String, Object> params);

    // 按条件查询
    /**
     * 根据支付平台查询交易记录
     */
    List<PaymentTransaction> findByPaymentPlatform(Integer paymentPlatform);

    /**
     * 根据收支类型查询交易记录
     */
    List<PaymentTransaction> findByIncomeExpense(Integer incomeExpense);

    /**
     * 根据交易状态查询交易记录
     */
    List<PaymentTransaction> findByTransactionStatus(String transactionStatus);

    /**
     * 根据交易订单号查询交易记录
     */
    Optional<PaymentTransaction> findByTransactionOrderNumber(String transactionOrderNumber);

    /**
     * 根据商家订单号查询交易记录
     */
    List<PaymentTransaction> findByMerchantOrderNumber(String merchantOrderNumber);

    // 更新操作
    /**
     * 更新交易记录
     */
    PaymentTransaction update(PaymentTransaction transaction);

    // 删除操作（逻辑删除）
    /**
     * 删除交易记录
     */
    int deleteById(Integer id);

    /**
     * 批量删除交易记录
     */
    int deleteAllById(List<Integer> ids);

    // 统计查询操作
    /**
     * 根据支付平台统计交易记录
     */
    List<Map<String, Object>> countByPlatform(Map<String, Object> params);

    /**
     * 根据收支类型统计交易记录
     */
    List<Map<String, Object>> countByIncomeExpense(Map<String, Object> params);
    
    /**
     * 根据交易对象统计交易记录
     */
    List<Map<String, Object>> countByTransactionPartner(Map<String, Object> params);
}